package java8_NewFeature.StreamApi;

import org.junit.jupiter.api.Test;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * 1.Stream关注的是对数据的运算，与CPU打交道
 *   集合关注的是数据的存储，与内存打交道
 * 2.
 *   2.1 stream自己不会存储元素
 *   2.2 stream 不会改变元对象。相反，它们会返回一个持有结果的新Stream
 * 3.Stream 执行流程
 *  3.1 Stream 的实例化
 *  3.2 一系列的中间操作（过滤映射）
 *   一个中间操作链，对数据源的数据进行处理
 *  3.3 终止操作
 *   一旦执行终止操作，就执行中间操作链，并产生结果。之后，不会在被使用。
 *
 * */

//1.实例化
public class StreamApi {

public static void main(String[] args) {
    //1.通过集合
    List<Employee> employees = EmployeeData.getEmployees();

    Stream<Employee> stream = employees.stream();
    //返回一个顺序流

    Stream<Employee> employeeStream = employees.parallelStream();
    //返回一个串行流

    //2.Array数组
    int arr1[] = new int[]{1,2,3,4,5};
    IntStream stream1 = Arrays.stream(arr1);

    Employee e1 = new Employee(1, "li", 21, 80000);
    Employee e2 = new Employee(2, "ma", 22, 90000);
    Employee[] arr2 = new Employee[]{e1,e2};
    Stream<Employee> stream2 = Arrays.stream(arr2);
    //3.stream 类本身的 of()

    Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);



   }
@Test
  public void test01(){
    //4.创建无限流
//    1.迭代，遍历前10个偶数
    Stream.iterate(0,t->t+2).limit(10).forEach(t->System.out.println(t));
}

    @Test
    public void test02(){
    //2.生成流
    Stream.generate(Math::random).limit(10).forEach(System.out::println);
    }
}

